package com.theme.common.third;

/**
 * @name: WechatController <tb>
 * @title: 微信登录接口  <tb>
 * @author: cuixinfu@51play.com <tb>
 * @date: 2020/9/6 17:30<tb>
 */

public class WechatController {
//    @RestController
//    @RequestMapping("app/wechat")
//    @Api("微信测试接口")
//    private static final Logger logger = LoggerFactory.getLogger(WechatController.class);
//
//    @Autowired
//    private JwtUtils jwtUtils;
//
//    @Autowired
//    private UserService userService;
//
//    @GetMapping("callback")
//    @ApiOperation("微信小程序回调")
//    public R callback(@RequestParam("code") String code,
//                      @RequestParam(value = "appId", required = false) String appId,
//                      @RequestParam(value = "appKey", required = false) String appKey) {
//        logger.info("appCallback step1 ===> 授权成功{微信授权回调得到的code={}和跳转地址={}}", code);
//        Map loginInfo = WeixinHandler.getMiniAppLoginInfo(code);
//        logger.info("appCallback step2 ===> 微信授权后得到的用户信息为:{}", JSONHandler.getGson().toJson(loginInfo));
//        if (loginInfo == null) {
//            return R.error("小程序登录失败出错!!!");
//        }
//        return R.ok(loginInfo);
//    }
//
//    @GetMapping("register")
//    @ApiOperation("微信小程序注册")
//    public R register(@RequestBody WechatRegForm form) {
//        //表单校验
//        ValidatorUtils.validateEntity(form);
//
//        //获取微信用户信息
//        UserEntity userEntity = userService.queryByOpenid(UserOriginEnum.WECHAT.getValue(), form.getOpenid());
//        if (userEntity != null) {
//            return R.ok().put("user", userEntity);
//        }
//        //创建用户：
//        UserEntity user = new UserEntity();
//        String nickname = EmojiHandler.filterEmoji(form.getNickName());
//        user.setUsername(PinYinUtils.getPingYin(nickname));
//        user.setNickname(nickname);
//        user.setAvatar(form.getAvatar());
//        user.setCountry(form.getCountry());
//        user.setProvince(form.getProvince());
//        user.setCity(form.getCity());
//        user.setGender(Integer.parseInt(form.getGender()));
//        // 保存用户-商户注册-微信注册
//        UserEntity result = userService.registerUser(user);
//
//        return R.ok().put("user", result);
//    }
//
//    @GetMapping("login")
//    @ApiOperation("微信小程序登录测试")
//    public R login(@Valid WechatLoginForm loginForm) {
//        //表单校验
//        ValidatorUtils.validateEntity(loginForm);
//
//        // 到微信服务器获取openid和session_key
//        Map loginInfo = WeixinHandler.getMiniAppLoginInfo(loginForm.getCode());
//        if (loginInfo == null) {
//            return R.error("请求错误！");
//        } else {
//            String openid = loginInfo.get("openid").toString();
//            String session_key = loginInfo.get("session_key").toString();
//
//            //获取微信用户信息
//            UserEntity user = userService.queryByOpenid(UserOriginEnum.WECHAT.getValue(), openid);
//            if (user != null) {
//                return saveLoginInfo(user);
//            }
//
//            user = new UserEntity();
//            try {
//                user.setOrigin(UserOriginEnum.WECHAT.getValue());
//                user.setOpenid(openid);
//                //获取解密数据：
//                String encryptedData = loginForm.getEncryptedData();
//                String iv = loginForm.getIv();
//                // 开始解密
//                String result = AesCbcUtil.decrypt(encryptedData, session_key, iv, "UTF-8");
//                if (null != result && result.length() > 0) {
//                    JSONObject userInfoJSON = JSONObject.fromObject(result);
//                    String nickname = EmojiHandler.filterEmoji(userInfoJSON.get("nickName").toString());
//                    user.setUsername(PinYinUtils.getPingYin(nickname));
//                    user.setNickname(nickname);
//                    user.setAvatar(userInfoJSON.get("avatarUrl").toString());
//                    user.setCountry(userInfoJSON.get("country").toString());
//                    user.setProvince(userInfoJSON.get("province").toString());
//                    user.setCity(userInfoJSON.get("city").toString());
//                    user.setGender(Integer.valueOf(userInfoJSON.get("gender").toString()));
//                    // 1、注册用户-商户注册-微信注册
//                    UserEntity resultUser = userService.registerUser(user);
//                    // 2、保存用户登录信息
//                    return saveLoginInfo(resultUser);
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//        return R.ok();
//    }
//
//    public R saveLoginInfo(UserEntity user) {
//        //生成token
//        String token = jwtUtils.generateToken(user.getId());
//
//        Map<String, Object> map = new HashMap<>();
//        map.put("token", token);
//        map.put("expire", jwtUtils.getExpire());
//
//        return R.ok(map);
//    }
//
//    /**
//     * 解密并且获取用户手机号码
//     *
//     * @param iv
//     * @param code
//     * @param encryptedData
//     */
//    @GetMapping("getPhoneNumber")
//    @ApiOperation("解密并且获取用户手机号码")
//    public @ResponseBody
//    R getPhoneNumber(@RequestParam("iv") String iv,
//                     @RequestParam("code") String code,
//                     @RequestParam("encryptedData") String encryptedData) {
//        logger.info("微信登录,获取用户手机号 code：{}", code);
//        Map loginInfo = WeixinHandler.getMiniAppPhoneNumber(code);
//        if (loginInfo == null) {
//            return R.error("小程序登录失败出错!!!");
//        }
//        String sessionkey = loginInfo.get("session_key").toString();
//        byte[] encrypData = Base64.decode(encryptedData);
//        byte[] ivData = Base64.decode(iv);
//        byte[] sessionKey = Base64.decode(sessionkey);
//        String phoneNumber = "";
//        try {
//            phoneNumber = AesCbcUtil.decrypt(sessionKey, ivData, encrypData);
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//            return R.error(500, "获取用户手机号异常!");
//        }
//        logger.info("解密获取用户手机号码为: {}", phoneNumber);
//        return R.ok().put("phoneNumber", phoneNumber);
//    }
//
//
//    /**
//     * 发送小程序模板消息
//     */
//    @PostMapping("sendMiniTemplateMsg")
//    @ApiOperation("发送小程序模板消息")
//    public @ResponseBody
//    R sendMiniTemplateMsg(@RequestParam("first") String first,
//                          @RequestParam("keyword1") String keyword1,
//                          @RequestParam("keyword2") String keyword2,
//                          @RequestParam("keyword3") String keyword3,
//                          @RequestParam("keyword4") String keyword4,
//                          @RequestParam("keyword5") String keyword5,
//                          @RequestParam("keyword6") String keyword6,
//                          @RequestParam("formId") String formId,
//                          @RequestParam("remark") String remark) {
//        try {
//            //1、获取getAccessToken
//            String accessToken = WeixinHandler.getMiniAccessToken();
//
//            //2、小程序参数
//            //openid: "o35K45dtFxwV_QSdINke-3vpX4bw"
//            //session_key: "i8UgcfJzQdWJStj1Om7a5Q=="
//            //unionid: "ozecexINQ-SigN19P_0XChDYUpLQ"
//            String openid = "o35K45dtFxwV_QSdINke-3vpX4bw";
//            String templateId = "33LGTgYOKmSzRYRsvSK4hR1-4afJiAWacszbOpy8SAs";
//            String page = "index";
//            //String formId = "wx_"+ DateUtilsHandler.getLongDate(); //搞不懂啊
//            String emphasisKeyword = "keyword1.DATA";
//
//            //3、添加参数
//            HashMap<String, Object> miniData = new HashMap<>();
//            miniData.put("first", first);
//            miniData.put("keyword1", keyword1);
//            miniData.put("keyword2", keyword2);
//            miniData.put("keyword3", keyword3);
//            miniData.put("keyword4", keyword4);
//            miniData.put("keyword5", keyword5);
//            miniData.put("keyword6", keyword6);
//            miniData.put("remark", remark);
//
//            //4、初始化模板消息：
//            HashMap<String, Object> initTemplateMessage = MessageUtil.initTemplateMessage(miniData, "#173177");
//            int cont = 0;
//            String sendTemplateMessage = WeixinHandler.sendMiniTemplateMessage(openid, templateId, page, formId, initTemplateMessage, emphasisKeyword, accessToken);
//
//            JSONObject jsonObjectSend = JSONObject.fromObject(sendTemplateMessage);
//            logger.error("微信发送模板消息result：{}", sendTemplateMessage);
//            Map<String, Object> data = new HashMap<>();
//            if (jsonObjectSend.getInt("errcode") == 0) {
//                cont++;
//                data.put("cont", cont);
//                data.put("msg", "发送成功！");
//                return R.ok(data);
//            }
//            return R.error("微信发送模板消息失败：" + sendTemplateMessage);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return R.error("微信发送模板消息失败：" + e.getMessage());
//        }
//    }
//
//    /**
//     * 发送小程序订阅消息
//     */
//    @PostMapping("sendMiniSubscribeMsg")
//    @ApiOperation("发送小程序订阅消息")
//    public @ResponseBody
//    R sendMiniSubscribeMsg(@RequestParam("keyword1") String keyword1,
//                           @RequestParam("keyword2") String keyword2,
//                           @RequestParam("keyword3") String keyword3,
//                           @RequestParam("keyword4") String keyword4,
//                           @RequestParam("keyword5") String keyword5,
//                           @RequestParam("remark") String remark) {
//        try {
//            //1、获取getAccessToken
//            String accessToken = WeixinHandler.getMiniAccessToken();
//
//            String openid = "o35K45dtFxwV_QSdINke-3vpX4bw";
//            String templateId = "x_106LS2USnUHYKFmsJMUD4A_a9TljxY_Jvl38V4Mdg";
//            String page = "pages/index/index";
//
//            //3、添加参数
//            //String pagepath = "pages/maps/maps?pointx="+pointX+"&pointy="+pointY+"&title="+message.getTitle();
//            //String thing5 = "";
//
//            HashMap<String, Object> miniData = new HashMap<>();
//            miniData.put("thing1", keyword1);
//            miniData.put("thing2", keyword2);
//            miniData.put("thing3", keyword3);
//            miniData.put("date4", DateHandler.getStringDate());
//            miniData.put("thing5", keyword5);
//
//            //4、初始化模板消息：
//            HashMap<String, Object> initTemplateMessage = MessageUtil.initTemplateMessage(miniData, "#173177");
//            String sendTemplateMessage = WeixinHandler.sendMiniSubscribeMessage(openid, templateId, page, initTemplateMessage, accessToken);
//
//            JSONObject jsonObjectSend = JSONObject.fromObject(sendTemplateMessage);
//            logger.error("微信发送模板消息result：{}", sendTemplateMessage);
//            Map<String, Object> data = new HashMap<>();
//            if (jsonObjectSend.getInt("errcode") == 0) {
//                data.put("msg", "微信发送发送订阅消息成功！");
//                return R.ok(data);
//            }
//            return R.error("微信发送发送订阅消息失败：" + sendTemplateMessage);
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error("微信发送发送订阅消息失败：{}", e.getMessage());
//            return R.error("微信发送发送订阅消息失败：" + e.getMessage());
//        }
//    }
}
